320 IF DNAM$="END" OR DNAM$="end" THEN GOTO 720 ELSE 440
330 CLS:PRINT "DO YOU WANT TO LIST IN ";YYY$;" SEQUENCE, (Y) OR (N) ?";
340 CH$=INKEY$ : IF CH$="" THEN 340
350 IF CH$="Y" OR CH$="y" THEN 370
360 END
370 ERASE ARRAY$ :FC = FCP
380 ERASE S.SP%: CLOSE #1: P = 1
390 ERASE AR$,FL$,DSK$ : SKP = 1 : SKIP = 0
400 IF SE=0 THEN SE=1 ELSE SE=0
410 IF SE=1 THEN XXX$="DISK" ELSE XXX$="FILE"
420 IF SE=1 THEN YYY$="FILE" ELSE YYY$="DISK"
430 GOTO 740
440 CLS
450 FILES
460 DEF SEG = &HB000
470 N=1
480 FOR I=0 TO 1600 STEP 160
490 FOR J=0 TO 130 STEP 26
500 FILEBILD$ = ""
510 L = I+J
520 FOR K=0 TO 24 STEP 2
530 FILEBILD$ = FILEBILD$ + CHR$(PEEK(K+L))
540 NEXT K
550 IF LEFT$(FILEBILD$,1) = " " THEN 610
560 ARRA$(N) = FILEBILD$
570 N = N+1
580 FILEBILD$ = ""
590 NEXT J
600 NEXT I
610 N=N-1
620 N1=N1+N
630 GOSUB 650
640 GOTO 270
650 REM write array to file
660 FOR I = 1 TO N
670 PRINT #1,USING "\ \";ARRA$(I)+DNAM$
680 ARRA$(I)=""
690 NEXT I
700 FC=FC+N
710 RETURN
720 CLOSE #1
730 FCP=FC
740 REM This example sorts "ARRAY$" in ascending order
750 DIM ARRAY$(FCP)
760 OPEN "B:DATA " FOR INPUT AS #1
770 FOR I = 1 TO FCP
780 IF SE = 1 THEN 810
790 INPUT#1,ARRAY$(I)
800 IF SE = 0 THEN 830
810 INPUT#1,REV$
820 ARRAY$(I) = MID$(REV$,14,8)+MID$(REV$,1,13)
830 NEXT I
840 GOSUB 900 ' Call to sort subroutine
850 PRINT "SORT COMPLETE " TIME$
860 GOTO 1060
870 REM *******************************************
880 REM ********* QUICKER SORT SUBROUTINE *********
890 REM ********* *********
900 S.AL% = FCP ' Limit of array to be sorted **** REQUIRED FOR SORT ****
910 CLS:PRINT "SORT STARTED ...STAND BY " TIME$
920 DIM S.SP%(CINT(LOG(S.AL%)/0.346574),2) 'If sort is to be called more than once, `DIM' the stack `S.SP%' for the largest size of the array outside the sort
930 S.IS% = 0: S.LL% = 1: S.UL% = S.AL%: GOTO 990
940 SWAP ARRAY$(S.SL%),ARRAY$(S.LL%):IF S.SL% > S.UL%-2 THEN S.UL% = S.SL%-1 ELSE IF S.SL% < S.LL%+2 THEN S.LL% = S.LL%+1 ELSE S.IS% = S.IS%+1: S.SP%(S.IS%,1)=S.LL%: S.SP%(S.IS%,2) = S.SL%-1: S.LL%=S.SL%+1
950 GOTO 990
960 FOR S.I1% = S.LL% + 1 TO S.UL%: FOR S.I2% = S.LL% TO S.I1%: IF ARRAY$(S.I1%) < ARRAY$(S.I2%) THEN SWAP ARRAY$(S.I1%),ARRAY$(S.I2%)
970 NEXT S.I2%: NEXT S.I1%
980 IF S.IS% = 0 THEN RETURN ELSE S.LL% = S.SP%(S.IS%,1): S.UL%=S.SP%(S.IS%,2): S.IS% = S.IS%-1
990 IF S.UL% - S.LL% <= 9 THEN 960 ELSE S.LS% = S.LL%: S.US% = S.UL% + 1: SWAP ARRAY$(S.LL%),ARRAY$(INT((S.US%-S.LS%)/2)+S.LL%)
1000 IF S.US% = S.LS%+1 THEN S.SL% = S.LS%: GOTO 940 ELSE S.LS% = S.LS% + 1: IF ARRAY$(S.LS%) <= ARRAY$(S.LL%) THEN 1020
1010 IF S.US% = S.LS% + 1 THEN S.SL% = S.LS%-1: GOTO 940 ELSE S.US% = S.US% - 1: IF ARRAY$(S.US%) >= ARRAY$(S.LL%) THEN 1010 ELSE SWAP ARRAY$(S.LS%),ARRAY$(S.US%): GOTO 1000
1020 IF S.US% = S.LS% + 1 THEN S.SL% = S.LS%: GOTO 940 ELSE S.US% = S.US% - 1: IF ARRAY$(S.US%) >= ARRAY$(S.LL%) THEN 1000
1030 IF S.US% = S.LS% + 1 THEN S.SL% = S.US%: GOTO 940 ELSE S.LS% = S.LS% + 1: IF ARRAY$(S.LS%) <= ARRAY$(S.LL%) THEN 1030 ELSE SWAP ARRAY$(S.LS%),ARRAY$(S.US%): GOTO 1020
1040 END '******** End of quicker sort subroutine **
1050 REM *******************************************